package com.fjut.oj.service;

import com.fjut.oj.pojo.Problem;
import com.fjut.oj.pojo.ProblemSample;
import com.fjut.oj.pojo.Problems1;
import com.fjut.oj.util.ProblemHTML;

import java.util.ArrayList;
import java.util.List;

/**
 * @author cjt
 */
public interface ProblemService {
    /**
     * 插入题目
     *
     * @param problem
     * @return
     */
    Integer insertProblem(Problem problem);

    /**
     * 设置题目类型 ptype = 0 为本地， ptype = 1为第三方
     *
     * @param pIds
     * @param type
     * @return
     */
    Integer updateSomeProblemType(ArrayList<Integer> pIds, Integer type);

    List<Problem> queryProblemsByPage(Integer startIndex);   // 一页一页的查询题目信息

    List<Problem> queryProblemsByConditions(Integer startIndex, Integer tagId, String title);

    Integer queryProblemCountByCondition(Integer tagId, String title);

    /**
     * 查询某个标题题目的相似题目数量
     *
     * @param title
     * @return
     */
    Integer queryProblemsNumByTitle(String title); // 查询某一题目的题的数量


    /**
     * 根据 tagId 查询 username 未做过的 随机三道有tagId的题目
     *
     * @param tagId
     * @param username
     * @return
     */
    List<Problem> queryProblemByTagId(Integer tagId, String username);

    Integer updateProblemtotalSubmit(Integer pid);

    Integer updateProblemtotalSubmitUser(Integer pid);

    Integer updateProblemTotalAc(Integer pid);

    Integer updateProblemtotalAcUser(Integer pid);

    List<Problem> queryProblemsFromHDU(Integer from, Integer to); // 查找一个范围内的杭电的题目

    Problem queryProblemById(Integer pid);   // 通过题目 ID 查找题目

    List<Problem> queryProblemByTitle(String title, Integer pid1);  // 通过题目名称查找题目

    Integer queryProblemCount();  // 查找题目的数量

    List<Problems1> getProblems1(int pid1, int pid2, boolean showhide, String owner);

    List<Problem> getProblems2(int from, int num, String search);

    List<Problem> getProblems3(int from, int num, String search);

    Integer getPageNum(int num, boolean showHide);

    Integer editProblem(Integer pid, Problem pro);

    Integer addProblem(Integer pid, Problem pro);

    /**
     * 设置题目类型 ptype = 0 为本地， ptype = 1为第三方
     *
     * @param pid
     * @param type
     * @return
     */
    Integer updateProblemType(Integer pid, Integer type);


    Integer setProblemVisiablePid(Integer pid);

    Integer setProblemVisiablePidZ(Integer pid, Integer z);

    List<Integer> getProblemsByOjPid(int oj, String ojspid);

    Integer saveProblemHTML(Integer pid, ProblemHTML ph);

    ProblemSample getProblemHTMLProblemSample(Integer pid);

    Problem queryProblemByOjidAndOjspid(Integer ojid, String ojspid);

    Integer queryMaxProblemId();


}
